OpenGL Shader
Shader 는 vertex 정보들을 화면에 보여질수 있도록 변환하는 작업을 하는 프로그램(명령어 집합)입니다. 스크린 위에 낱개의 픽셀마다 실행되며 이 실행들이 한번에 일어납니다. 이러한 작업은 GPU 에서 일어납니다.
파이프라인을 통해 작업이 줄지어 실행되며 한 Shader 에서 다음 Shader 로 넘어갈때 변수에 데이터를 담아 보내게 됩니다. 변수에 데이터를 담는 규칙은 다음과 같습니다.
- 변수의 이름과 타입은 이전 Shader 에서의 그것과 일치합니다.
- 파이프라인 구조상 다음에 위치한 Shader 에게만 변수를 전달할 수 있습니다.
Shader 들은 새로운 프로그램을 적용함으로써 알맞게 변형시킬 수 있으며 대표적으로 Vertex Shader, Fragment Shader 를 변형하여 적용합니다. 이에 반해 Vertex Fetch, Rasterization, Buffer Operations 등은 직접 컨트롤할 수 없는 작업입니다.
GLSL
Shader 라는 프로그램을 실행하려면 여기에 맞는 언어를 사용하게 되는데 이 언어를 GLSL(OpenGL Shading Language) 라고 합니다. C 언어를 기반으로 합니다.
Vertex Shader
Vertex Shader 는 3차원 좌표로 이루어진 vertex 들이 2차원 화면에서 그려질 위치를 정의합니다. gl_Position
이란 변수는 미리 정의되어 있는 변수이며 스크린상의 점의 위치를 가리키는 값을 저장하고 있습니다.
|
|
Fragment Shader
Fragment Shader 는 각각의 픽셀들이 어떤 색상으로 그려질지를 정의합니다. 반환값으로 색상버퍼를 반환하며 색상버퍼에 표현되지 않는 오브젝트들은 전부 검정색으로 표현됩니다. gl_FragColor
는 함수의 반환값으로 사용되는 변수이며 화면에 나타낼 색을 정의합니다.
|
|
Rendering Pipeline
Vertex Shader 작업 후 Fragment Shader 작업을 진행하기 전 Rasterization 이라는 작업이 있는데 이것은 Vertex Shader 에서 처리된 값들을 Fragment Shader 가 처리 가능한 값으로 변환하는 작업을 담당합니다.
참고자료
이 포스트가 도움이 되었다고 생각하시면, 위의 버튼을 클릭하여 후원해주세요.
이 포스트를 공유하려면 QR 코드를 스캔하세요.